#ifndef KEYBOARD_H
#define KEYBOARD_H

#include "main.h"
#include "io.h"
#include "structs.h"
#include "memory.h"
#include "keyboard.h"

struct keyb_listener {
	void ( *function)(struct keyboard_struct *);
};

/* Startet die Tastatur
 * Parameter: Keine
 * Rückgaben: Keine
 */
void keyboard_init ();

/* Liest den Befehlspuffer leer und sendet dann einen Befehl an die Tastatur
 * Parameter: Kommandobyte
 * Rückgaben: Keine
 */
void send_command (uint8_t command);

/* Funktionen um die LEDs auf der Tastatur ein- und auszuschalten
 * Parameter: TRUE = LED an, FALSE = LED aus
 * Rückgaben: Keine
 */

void set_led_numlock (BOOL);
void set_led_capslock (BOOL);
void set_led_scrolllock (BOOL);

/* Setzt die Zustände (ob an oder aus) der einzelnen LEDs
 * Parameter: Status der Numlock LED, Status der Capslock LED, Status der Scrolllock LED
 * Rückgaben: Keine
 */
void set_leds (BOOL, BOOL, BOOL);

/* Liefert die Bitmaske für die LEDs zurück
 * Parameter: Keine
 * Rückgaben: Bitmaske
 */
uint8_t get_led_mask ();

/* Wird aufgerufen (von idt_behandlung() ) wenn eine Taste betätigt wird
 * Paramter: Keine
 * Rückgaben: Keine
 */
void keyboard_handler ();

/* Ruft alle Handler Funktionen auf
 * Parameter: Pointer zu einer keyboard_struct Struktur
 * Rückgaben: Keine
 */
void keyb_send_event (struct keyboard_struct *);

/* Trägt eine Handlerfunktion in die Liste ein
 * Paramter: Pointer zur Handler Funktion
 * Rückgaben: Keine
 */
void keyb_add_handler (void (*)(struct keyboard_struct *));

/* Löscht eine Handlerfunktion aus der Liste
 * Parameter: Pointer zur Handler Funktion
 * Rückgaben: Keine
 */
void keyb_remove_handler (void (*)(struct keyboard_struct *));

#endif
